package com.funsport.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.funsport.entity.ClubMember;

import java.util.List;

/**
 * 俱乐部成员 Service接口
 */
public interface IClubMemberService extends IService<ClubMember> {

    /**
     * 加入俱乐部
     *
     * @param userId 用户ID
     * @param clubId 俱乐部ID
     * @return 是否成功
     */
    boolean joinClub(Long userId, Long clubId);

    /**
     * 退出俱乐部
     *
     * @param userId 用户ID
     * @param clubId 俱乐部ID
     * @return 是否成功
     */
    boolean leaveClub(Long userId, Long clubId);

    /**
     * 审核加入申请
     *
     * @param memberId 成员ID
     * @param approved 是否通过
     * @param operatorId 操作者ID
     * @return 是否成功
     */
    boolean approveJoinRequest(Long memberId, Boolean approved, Long operatorId);

    /**
     * 踢出成员
     *
     * @param memberId 成员ID
     * @param clubId 俱乐部ID
     * @param operatorId 操作者ID
     * @return 是否成功
     */
    boolean removeMember(Long memberId, Long clubId, Long operatorId);

    /**
     * 设置成员角色
     *
     * @param memberId 成员ID
     * @param role 新角色
     * @param operatorId 操作者ID
     * @return 是否成功
     */
    boolean setMemberRole(Long memberId, String role, Long operatorId);

    /**
     * 获取俱乐部成员列表
     *
     * @param clubId 俱乐部ID
     * @param status 状态筛选
     * @return 成员列表
     */
    List<ClubMember> getClubMembers(Long clubId, String status);

    /**
     * 检查用户是否是俱乐部成员
     *
     * @param userId 用户ID
     * @param clubId 俱乐部ID
     * @return 是否是成员
     */
    boolean isMember(Long userId, Long clubId);

    /**
     * 检查用户是否是俱乐部管理员
     *
     * @param userId 用户ID
     * @param clubId 俱乐部ID
     * @return 是否是管理员
     */
    boolean isAdmin(Long userId, Long clubId);

    /**
     * 增加成员贡献积分
     *
     * @param userId 用户ID
     * @param clubId 俱乐部ID
     * @param points 积分数量
     * @return 是否成功
     */
    boolean addContributionPoints(Long userId, Long clubId, Integer points);

    /**
     * 获取成员在俱乐部的角色
     *
     * @param userId 用户ID
     * @param clubId 俱乐部ID
     * @return 成员角色（admin/member等），如果不是成员返回null
     */
    String getMemberRole(Long userId, Long clubId);
}
